package com.msf.tutorial.java8.chapter8;

import java.util.stream.IntStream;

/**
 * 练习题：勾股数
 *
 * 符合公式 a * a + b * b = c * c （其中a,b,c都为整数）的即为勾股数，即直角三角形的三个边长。
 * 计算 1-100 之间的勾股数
 *
 */
public class C02Exam {

    /**
     * 解题思路
     *
     * 假设为直角三角形的三个边，一个短边(a)，一个长边(b)，一个斜边(c)
     *
     * 其中 b >= a，a 从 1 开始递增至 100
     *
     * 只需要保证 a*a + b*b 取根为整数即可
     */
    public static void test() {
        IntStream.range(1, 100)
                .boxed()
                .flatMap(a -> IntStream.range(a, 100)
                        .mapToObj(b -> new int[] {a,b,(int)Math.sqrt(a*a + b*b)})
                        .filter(b -> b[2]%1 == 0))
                .forEach(s -> System.out.println(s[0] + " " + s[1] + " " + s[2]));
    }

    public static void main(String[] args) {
        test();
    }


}
